/**
 * 核心技术支持
 * IT渠道网 小程序商城
 * 13873174181 微信同号
 */
import {Token} from 'token.js';
import {Config} from 'config.js';

class Base {
    constructor() {
        this.baseRestUrl = Config.restUrl;
        this.onPay = Config.onPay;
    }
    // HTTP请求基类，当noRefech为true时，不做未授权重试机制
    request(params, noRefetch) {
        var that = this, 
            url  = this.baseRestUrl + params.url;
        if(!params.type){
            params.type = 'get';
        }
        // 不封装地址
        if(params.setUpUrl==false){
            url = params.url;
        }
        // 请求
        wx.request({
            url: url,
            data: params.data,
            method: params.type,
            header: {
                'content-type': 'application/json', // 'Content-Type': 'application/x-www-form-urlencoded',
                'token': wx.getStorageSync('token') // token
            },
            success: function(res) {
                console.log(9, res.data);
                var code = res.data.statusCode;
                if (code == 401) {
                    if (!noRefetch) { // 设置隔断
                        that._refetch(params); // 刷新获取新token
                    } else {
                        that._processError(res);
                        params.eCallback && params.eCallback(res.data);
                    }
                } else {
                    params.sCallback && params.sCallback(res.data);
                }
            },
            fail: function(err) {
                wx.hideNavigationBarLoading();
                that._processError(err);
                params.eCallback && params.eCallback(err);
            }
        });
    }
    /**
     * 刷新获取新token
     */
    _refetch(param) {
        var token = new Token();
        token.getTokenFromServer((token) => { // token为最后处理成功的结果 已存入缓存 :也可不用注入返回
            this.request(param, true);
        });
    }
    /**
     * 打印错误
     */
    _processError(err) {
        console.log(err);
    }
    /**
     * 获得元素绑定值
     */
    getDataSet(event, key) {
        return event.currentTarget.dataset[key]; // .dataset.key
    }
    /**
     * 获取restUrl
     */
    getUrl() {
        return Config.restUrl;
    }
};

export {Base};
